import openpyxl
from openpyxl.styles import Font

# 读写Excel文件的工具类
class ExcelFileHandler:
    def __init__(self, file_path):
        self.file_path = file_path

    # 写入Excel文件
    def write_excel(self, data, sheet_name='Sheet1', headers=None):
        # 创建工作簿
        workbook = openpyxl.Workbook()
        # 获取活动工作表
        sheet = workbook.active
        sheet.title = sheet_name
        
        # 如果有表头，先写入表头
        row_index = 1
        if headers:
            # 写入表头并设置字体为粗体
            for col_index, header in enumerate(headers, 1):
                cell = sheet.cell(row=row_index, column=col_index)
                cell.value = header
                cell.font = Font(bold=True)
            row_index += 1
        
        # 写入数据
        for row_data in data:
            for col_index, cell_value in enumerate(row_data, 1):
                sheet.cell(row=row_index, column=col_index).value = cell_value
            row_index += 1
        
        # 保存工作簿
        workbook.save(self.file_path)
        print(f"Excel文件 '{self.file_path}' 已成功创建")

    # 读取Excel文件
    def read_excel(self, sheet_name=None):
        # 打开已有的工作簿
        workbook = openpyxl.load_workbook(self.file_path)
        
        # 如果没有指定工作表名，则使用活动工作表
        if sheet_name is None:
            sheet = workbook.active
        else:
            sheet = workbook[sheet_name]
        
        # 读取所有数据
        data = []
        for row in sheet.iter_rows(values_only=True):
            data.append(list(row))
        
        print(f"已成功读取Excel文件 '{self.file_path}'")
        return data

    # 追加数据到Excel文件
    def append_excel(self, data, sheet_name=None):
        try:
            # 尝试打开已有的工作簿
            workbook = openpyxl.load_workbook(self.file_path)
            
            # 如果没有指定工作表名，则使用活动工作表
            if sheet_name is None:
                sheet = workbook.active
            else:
                sheet = workbook[sheet_name]
            
            # 获取当前最后一行的行号
            last_row = sheet.max_row
            
            # 追加数据
            for row_data in data:
                last_row += 1
                for col_index, cell_value in enumerate(row_data, 1):
                    sheet.cell(row=last_row, column=col_index).value = cell_value
            
            # 保存工作簿
            workbook.save(self.file_path)
            print(f"已成功追加数据到Excel文件 '{self.file_path}'")
        except FileNotFoundError:
            print(f"文件 '{self.file_path}' 不存在，将创建新文件")
            # 如果文件不存在，则创建新文件并写入数据
            self.write_excel(data, sheet_name)

# 示例用法
if __name__ == '__main__':
    # 创建Excel文件处理器实例
    excel_handler = ExcelFileHandler('example.xlsx')
    
    # 示例数据和表头
    headers = ['姓名', '年龄', '城市', '职业']
    sample_data = [
        ['张三', 28, '北京', '工程师'],
        ['李四', 32, '上海', '设计师'],
        ['王五', 45, '广州', '经理'],
        ['赵六', 36, '深圳', '产品经理']
    ]
    
    # 写入Excel文件
    excel_handler.write_excel(sample_data, sheet_name='员工信息', headers=headers)
    
    # 读取Excel文件
    read_data = excel_handler.read_excel(sheet_name='员工信息')
    print("读取的数据：")
    for row in read_data:
        print(row)
    
    # 准备追加的数据
    append_data = [
        ['孙七', 29, '杭州', '开发工程师'],
        ['周八', 31, '成都', '测试工程师']
    ]
    
    # 追加数据到Excel文件
    excel_handler.append_excel(append_data, sheet_name='员工信息')
    
    # 再次读取Excel文件，验证追加是否成功
    updated_data = excel_handler.read_excel(sheet_name='员工信息')
    print("追加后的所有数据：")
    for row in updated_data:
        print(row)